import axios from 'axios'
import commonMethods from './commonMethods.js'

export default function (Options) {
    return {
        /**
         * POST 方法
         * @method post(urlKey, data, config, ..., argN)
         * @memberof GetData
         * @param {string} urlKey - 对应API中的urlkey
         * @param {object} data - POST请求中传递的参数，根据config中的dataType字段设置格式，默认为'formData'
         * @param {object} config - POST请求的设置变量，dataType为自定义字段，设置POST请求参数的格式，可以设置为'json'、'formData'，默认为'formData'
         * @param {string} argN 可配置无数个参数，第四个至最后的一个参数会以'/'为连接符拼至请求 url 中
         * @returns {promise} 返回promise对象
         * @example
         * axios.post('/user', {
         *   data: { ID: 12345 }
         * }, path1, path2, path3...)
         */
         post: function (urlKey, data, config) {
            var args = Array.prototype.slice.apply(arguments);
            // var url = Options.baseUrl + Options.apiList[urlKey] + '/' + args.slice(3, args.length).join('/');
            // debugger
            var url = commonMethods.formatUrl(Options, urlKey, args);

            var _dataTypeConfig = commonMethods.dataTypeConfig(config, data, Options);
            var _data = _dataTypeConfig.data;
            var _config = _dataTypeConfig.config;
            axios.defaults.withCredentials=true
            return axios.post(url, _data, _config);
        },

        /**
         * 用户自定义 URL 的 POST 方法
         * @method postUrl(url, data, config)
         * @memberof GetData
         * @param url 户自定义的URL
         * @param data POST请求中传递的参数，根据config中的dataType字段设置格式，默认为'formData'
         * @param config 发送ajax传递的参数对象
         * @returns {promise} 返回promise对象
         */
         postUrl: function (url, data, config) {
            var _data;
            var _config = commonMethods.extendConfig(config, Options);
            _config.headers['Content-Type'] = 'application/json';
            // switch (dataType) {
            //   case 'formData':
            //     _data = toFormData(data);
            //     break;
            //   case 'json':
            //   default:
            //     _config.headers['Content-Type'] = 'application/json';
            //     _data = data;
            //     break;
            // }
            return axios.post(url, data, _config);
        },

        /**
         * 调用 restful 接口的 POST 方法
         * @method postRestful(urlKey, data, config)
         * @memberof GetData
         * @param urlKey 对应API 中的urlkey
         * @param data POST请求中传递的参数
         * @param config 发送ajax传递的参数对象
         * @returns {promise} 返回promise对象
         */
         postRestful: function (urlKey, params, data, config) {
            var _config = commonMethods.extendConfig(config, Options);
            // 如果用户自定义URL，则直接使用用户自定义的URL，不使用apilist
            var url = Options.baseUrl + Options.apiList[urlKey];
            url = url.restfulFormat(params);
            return axios.post(url, data, _config);
        },
    }
}

